﻿#!/usr/bin/env python
# -*- coding:utf-8 -*-

'thread introduction'

__author__='zhaoxp'

import Queue,threading,time

exitFlag=0
queueLock=threading.Lock()
workQueue=Queue.Queue(10)

class myThread(threading.Thread):
	def __init__(self,threadID,name,q):
		threading.Thread.__init__(self)
		self.threadID=threadID
		self.name=name
		self.q=q
	def run(self):
		print 'Starting '+self.name+'---'
		process_data(self.name,self.q)
		print 'Exiting '+self.name
		
def process_data(threadName,q):
	while not exitFlag:
		queueLock.acquire()
		if not workQueue.empty():
			data=q.get()
			queueLock.release()
			print '%s processing %s' % (threadName,data)
		else:
			queueLock.release()
		time.sleep(1)
		
if __name__=='__main__':
	threadList=['Thread-1','Thread-2','Thread-3']
	nameList=['One','Two','Three','Four','Five']
	threads=[]
	threadID=1
	# 创建新线程
	for i in threadList:
		thread=myThread(threadID,i,workQueue)
		thread.start()
		time.sleep(1)
		threads.append(thread)
		threadID+=1
		
	#
	queueLock.acquire()
	for word in nameList:
		workQueue.put(word)
	queueLock.release()
	
	while not workQueue.empty():
		time.sleep(1)
		pass
	
	exitFlag=1
	
	for t in threads:
		t.join()
	
	print 'Exiting Main Thread'
	